package pub.cleangao.memm.registry;

import pub.cleangao.memm.transport.message.RpcRequest;

import java.net.InetSocketAddress;
import java.util.Set;


public interface RpcServiceRegistry {

    /**
     * 发布服务
     */
    void publishService(RpcServiceConfig service);

    /**
     * 查找可用服务
     */
    InetSocketAddress lookupService(RpcRequest rpcRequest);


    /**
     * 刷新本地缓存
     */
    void reloadLocalCache();


    /**
     * 全部的服务节点
     */
    Set<String> allServeNode();

    /**
     * 删除存储
     *
     * @param hostPort [host]:[port]
     */
    void removeRemoteNode(String hostPort);

    /**
     * 根据请求获取本地实际执行对象
     *
     * @param rpcRequest RPC请求
     * @return RPC 接口的实现类
     */
    Object getServiceImpl(RpcRequest rpcRequest);


    /**
     * 本地下线
     * <p>
     * 删除注册中心中的数据
     */
    void unregister();

    /**
     * 标记非健康连接
     *
     * @param hostPort ip:port
     */
    void markUnHealth(String hostPort);


}
